home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / checkbox / plugins / launchpad_exchange.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  5.4 KB  |  115 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import time
  5. import pprint
  6. import bz2
  7. import logging
  8. import posixpath
  9. from gettext import gettext as _
  10. from socket import gethostname
  11. from StringIO import StringIO
  12. from checkbox.lib.conversion import string_to_type
  13. from checkbox.lib.log import format_delta
  14. from checkbox.lib.transport import HTTPTransport
  15. from checkbox.properties import Int, String
  16. from checkbox.plugin import Plugin
  17.  
  18. class LaunchpadExchange(Plugin):
  19.     timeout = Int(default = 120)
  20.     transport_url = String(default = 'https://launchpad.net/+hwdb/+submit')
  21.     
  22.     def register(self, manager):
  23.         super(LaunchpadExchange, self).register(manager)
  24.         self._headers = { }
  25.         self._form = {
  26.             'field.private': False,
  27.             'field.contactable': False,
  28.             'field.live_cd': False,
  29.             'field.format': u'VERSION_1',
  30.             'field.actions.upload': u'Upload' }
  31.         for rt, rh in [
  32.             ('report-architecture', self.report_architecture),
  33.             ('report-client', self.report_client),
  34.             ('report-datetime', self.report_datetime),
  35.             ('report-distribution', self.report_distribution),
  36.             ('report-email', self.report_email),
  37.             ('report-submission_id', self.report_submission_id),
  38.             ('report-system_id', self.report_system_id),
  39.             ('exchange-report', self.exchange_report),
  40.             ('exchange', self.exchange)]:
  41.             self._manager.reactor.call_on(rt, rh)
  42.         
  43.  
  44.     
  45.     def report_architecture(self, message):
  46.         self._form['field.architecture'] = message
  47.  
  48.     
  49.     def report_client(self, message):
  50.         user_agent = '%s/%s' % (message['name'], message['version'])
  51.         self._headers['User-Agent'] = user_agent
  52.  
  53.     
  54.     def report_datetime(self, message):
  55.         self._form['field.date_created'] = message
  56.  
  57.     
  58.     def report_distribution(self, message):
  59.         self._form['field.distribution'] = message.distributor_id
  60.         self._form['field.distroseries'] = message.release
  61.  
  62.     
  63.     def report_email(self, message):
  64.         self._form['field.emailaddress'] = message
  65.  
  66.     
  67.     def report_submission_id(self, message):
  68.         self._form['field.submission_key'] = message
  69.  
  70.     
  71.     def report_system_id(self, message):
  72.         self._form['field.system'] = message
  73.  
  74.     
  75.     def exchange_report(self, message):
  76.         self._report = message
  77.  
  78.     
  79.     def exchange(self):
  80.         form = { }
  81.         for field, value in self._form.items():
  82.             form[field] = str(value).encode('UTF-8')
  83.         
  84.         payload = open(self._report, 'r').read()
  85.         compressed_payload = bz2.compress(payload)
  86.         file = StringIO(compressed_payload)
  87.         file.name = '%s.xml.bz2' % str(gethostname())
  88.         file.size = len(compressed_payload)
  89.         form['field.submission_data'] = file
  90.         if logging.getLogger().getEffectiveLevel() <= logging.DEBUG:
  91.             logging.debug('Uncompressed payload length: %d', len(payload))
  92.         
  93.         transport = HTTPTransport(self.transport_url)
  94.         start_time = time.time()
  95.         response = transport.exchange(form, self._headers, timeout = string_to_type(self.timeout))
  96.         end_time = time.time()
  97.         if not response:
  98.             self._manager.reactor.fire('exchange-error', _('Failed to contact server. Please try\nagain or upload the following file name:\n%s\n\ndirectly to the system database:\nhttps://launchpad.net/+hwdb/+submit') % posixpath.abspath(self._report))
  99.             return None
  100.         if response.status != 200:
  101.             self._manager.reactor.fire('exchange-error', _('Failed to upload to server,\nplease try again later.'))
  102.             return None
  103.         header = response.getheader('x-launchpad-hwdb-submission')
  104.         if not header:
  105.             self._manager.reactor.fire('exchange-error', _('Information not posted to Launchpad.'))
  106.         elif 'Error' in header:
  107.             self._manager.reactor.fire('exchange-error', header)
  108.             logging.error(header)
  109.         else:
  110.             text = response.read()
  111.             logging.info('Sent %d bytes and received %d bytes in %s.', file.size, len(text), format_delta(end_time - start_time))
  112.  
  113.  
  114. factory = LaunchpadExchange
  115.